//
//  main.m
//  OC_03_属性_点语法
//
//  Created by wyx on 16/2/26.
//  Copyright © 2016年 Apon. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Fraction.h"
#import "Person.h"
int main(int argc, const char * argv[]) {
#pragma mark - 知识点1. 属性
#if 0
    /** 属性实现三个功能: 1.声明了一个实例变量.
                        2.声明了 setter 和 getter 方法
                        3.实现了 setter 和 getter 方法
        详见 Person 类文件
     *
     */
    //创建 person 对象
    Person *per = [Person person];
    //实例变量赋值
    [per setName:@"Tom"];
    [per setSex:@"male"];
    [per setAge:20];
    //实例变量取值
    NSLog(@"name:%@, sex:%@, age:%ld",[per name],[per sex],[per age]);
#endif
#pragma mark - 知识点2. 属性的特性
    /** 属性有三个:读写性,原子性,语义设置
     *  属性的特性的目的: 控制 setter,getter 方法实现的细节
     *  读写性特性有: readonly readwrite setter= getter=.
        默认 readwrite 常用 readwrite
     *  原子性特性有: atomic,nonatomic 默认原子性 常用非原子性 non
     *  语义设置有: assign retain copy 默认 assign 通常非对象类型(int NSIOntger)使用 assign.
        对象类型(NSString)使用 retain
        对象类型并且向获取副本 使用 copy
        详见 Person.h 文件
     */
#pragma mark - 知识点3. 点语法
#if 0
    /**
     * 点语法只适用于 setter 和 getter方法
     */
    //创建对象
    Person *per1 = [Person person];
    //点语法赋值
    per1.name = @"Tom";
    per1.sex = @"male";
    per1.age = 20;
    NSLog(@"name:%@, sex:%@, age:%ld", per1.name, per1.sex, per1.age);
    Person *per2 = [Person person];
    per2.name = per1.name;
#endif
#pragma mark - 综合练习(分数)
    /**
     * 创建一个Fraction类(分数)实现分数的加减乘除, ⽐较⼤小、约分等方法。
     * 提示：
     * 1.声明属性 numerator(分子)、denominator(分母)。
     * 2.声明自定义初始化方法、遍历构造器，用于给分子分母赋值。
     * 3.声明功能方法
     */
    //创建分数对象
    Fraction *fra1 = [Fraction fractionWithNumeration:6 denominator:10];
    Fraction *fra2 = [Fraction fractionWithNumeration:1 denominator:2];
    //调用加法
    Fraction *fra3 = [fra1 addWithFraction:fra2];
    //NSLog(@"sum%@",frac3);
    NSLog(@"sum = %ld/%ld",fra3.numerator,fra3.denominator);
    Fraction *fra4 = [fra1 subWithFraction:fra2];
    NSLog(@"sum = %ld/%ld",fra4.numerator,fra4.denominator);
    Fraction *fra5 = [fra1 mulWithFraction:fra2];
    NSLog(@"sum = %ld/%ld",fra5.numerator,fra5.denominator);
    Fraction *fra6 = [fra1 divWithFraction:fra2];
    NSLog(@"sum = %ld/%ld",fra6.numerator,fra6.denominator);
    //调用比较大小
    [fra1 cmpWithFraction:fra2];
    //调用约分
    Fraction *fra7 = [fra1 simWithFraction:fra1];
    NSLog(@"%ld/%ld",fra7.numerator,fra7.denominator);
    
    return 0;
}
